﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EnviamentDeDocuments.ObjectesDeDades;
using EnviamentDeDocuments.ObjectesDeDades.TDiariExpedDadesVariablesDataSetTableAdapters;

namespace EnviamentDeDocuments
{
    class Contexte
    {

        private static List<Client> _clients;
        public static List<Client> getClients()
        { 
            if (_clients == null)
            {
                PropertiesFileParser parser = new PropertiesFileParser(Properties.Settings.Default.pathToPropertiesFile);
                _clients = new List<Client>();

                foreach (KeyValuePair<String, String> kvp in parser.getProperties())
                {
                    _clients.Add(new Client() {Nif = kvp.Key, Nom = kvp.Value});
                }                
            }

            return _clients;
        }
        
        private static List<Exercici> _exercicis;
        public static List<Exercici> getExercicis()
        {
            if (_exercicis == null)
            {
                _exercicis = new List<Exercici>();
                for (int i = 2010; i < DateTime.Today.Year + 2; i++)
                    _exercicis.Add(new Exercici() { Any = i });
            }

            return _exercicis;
        }

        private static List<Periode> _periodes;
        public static List<Periode> getPeriodes()
        {
            if (_periodes == null)
            {
                _periodes = new List<Periode>();
                _periodes.Add(new Periode() { Codi = "01", Nom = "Gener", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "02", Nom = "Febrer", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "03", Nom = "Març", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "04", Nom = "Abril", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "05", Nom = "Maig", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "06", Nom = "Juny", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "07", Nom = "Juliol", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "08", Nom = "Agost", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "09", Nom = "Setembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "10", Nom = "Octubre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "11", Nom = "Novembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "12", Nom = "Desembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "1T", Nom = "Primer Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "2T", Nom = "Segon Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "3T", Nom = "Tercer Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "4T", Nom = "Quart Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "1P", Nom = "Primer Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "2P", Nom = "Segon Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "3P", Nom = "Tercer Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "0A", Nom = "Anual", Tipus = Periode.enumTipusPeriode.Anual });
            }

            return _periodes;
        }

        private static List<Impost> _impostos;
        public static List<Impost> getImpostos()
        {
            if (_impostos == null)
            {
                TDiariExpedDadesVariablesDataSet ds = new ObjectesDeDades.TDiariExpedDadesVariablesDataSet();
                TTipusImpostosTableAdapter ta = new ObjectesDeDades.TDiariExpedDadesVariablesDataSetTableAdapters.TTipusImpostosTableAdapter();
                ta.Fill(ds.TTipusImpostos);

                _impostos = new List<Impost>();
                foreach (TDiariExpedDadesVariablesDataSet.TTipusImpostosRow row in ds.TTipusImpostos)
                {
                    if (!row.IsBaixaNull() && !row.Baixa) 
                        _impostos.Add(new Impost() {Codi = row.Impostos, Nom = row.Descripcio });
                }
            }

            return _impostos;
        }
    }
}
